-- 2022-7-25

--[[
    lua中的字符使用八个byte位来存储

    lua中的字符串是不可变值。我们不能像在C语言中那样直接改变某个字符串的字符，我们只能创建一个新的字符串

    像lua中的其他对象(表，函数等)一样，字符串也是自动内存管理的对象之一。这意味着lua语言会负责字符串的分配和释放，开发人员无需关注

    我们可以使用长度操作符#获取字符串的长度,在不同的编码中这个值可能和字符串中的字符个数不同

    连接操作符..可以连接两字符串，如果操作数中存在数字，那么lua语言会先把数字转换成字符串

    字符串是不可变量
]]

print(#"qdwqw")
print("3"..5)
print("qwe".."qwe")

--[[
    我们可以使用""或''来声明字符串
    这两种方式在声明时是等价的
    唯一的区别在于，使用双引号声明的字符串中出现单引号时可以不用转义，使用单引号声明的字符串中出现双引号时可以不用转义
]]

a = "lua'a'"
print(a)
b = 'lua"lua"'
print(b)

--[[
    从代码风格来看，大多数程序员会选择使用一种方式来声明

    lua语言支持一些C语言风格的转义字符
    \a响铃,\b退格,\f换页,\n换行,\r回车,\t水平制表符,\v垂直制表符,\\,\",\'
]]

print("lua'\n'ua") -- 转义字符\n  

--[[
    4.2
    长字符串/多行字符串
    可以使用一对双方括号来声明长字符串/多行字符串常量。
    被方括号括起来的内容可以包括很多行，并且内容中的转义序列不会被转义。此外如果多行字符串在的第一个字符是换行符，那么这个换行符会被忽略
    多行字符串在包含大段代码声明时非常方便
]]

page = [[
    hello
    hell;
]]
print(page)
print("end")

--[[
    为了避免字符串被一些括号截断时，可以在括号之间加上等号，结束的括号之间也需要存在相等数量的等号才能判断结束
    Lua语言的语法扫描器会忽略所含等号数量不相同的方括号
    通过选择恰当数量的等号，就可以在无需修改字符串的情况下声明任意的字符串常量了
    对于注释而言，这种机制也同样有效，从而包含内部注释的一些东西
]]
p = [==[
    wqeqwe
]===]
wqeqwe
]==]
print(p)

--[[
    当代码中需要使用常量文本时，使用长字符串是一种理想的选择
    对于非文本常量，我们不应该滥用长字符串
    对于一些转义字符，我们通常将二进制数据转换为十进制或十六进制的数值转义序列进行表示
    不过因为这种转义序列通常很长，'\z'可以解决这个问题，该转义字符将会跳过后面所有的空白字符和直到遇到第一个非空白字符
]]